package com.joshua.spring.integration.authenticator;

import com.joshua.spring.entity.dto.UserInfoDTO;
import com.joshua.spring.integration.IntegrationAuthentication;

/**
 * com.joshua.spring.business.integration -- IntegrationAuthenticator
 * description: 定义集成认证-认证器接口
 *
 * @author <a href="mailto:joshualwork@163.com">joshua_liu</a>
 * @date 2020/1/6 10:54
 */
public interface IntegrationAuthenticator {
    /**
     * description: 处理集成认证
     *
     * @param authentication 集成认证实体
     * @return {@link UserInfoDTO} 用户表实体
     * @author <a href="mailto:joshualwork@163.com">joshua_liu</a>
     * @date 2020/1/6 10:55
     */
    UserInfoDTO authenticate(IntegrationAuthentication authentication);

    /**
     * description: 预处理
     * 在拦截的通知进行预处理，预处理的场景有很多，
     * 比如验证短信验证码是否匹配、图片验证码是否匹配、是否是登录IP白名单等
     * @param authentication 集成认证实体
     * @author <a href="mailto:joshualwork@163.com">joshua_liu</a>
     * @date 2020/1/6 10:56
     */
    void prepare(IntegrationAuthentication authentication);

    /**
     * description: 判断是否支持集成认证类型
     *
     * @param authentication 集成认证实体
     * @return {@link boolean}
     * @author <a href="mailto:joshualwork@163.com">joshua_liu</a>
     * @date 2020/1/6 10:56
     */
    boolean support(IntegrationAuthentication authentication);

    /**
     * description: 认证结束后执行
     *
     * @param authentication 集成认证实体
     * @author <a href="mailto:joshualwork@163.com">joshua_liu</a>
     * @date 2020/1/6 10:57
     */
    void complete(IntegrationAuthentication authentication);

}
